Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.03.2010, 18:23
Аватар для Jekel
Профессор
Отправить личное сообщение для Jekel Посмотреть профиль Найти все сообщения от Jekel
 
Регистрация: 20.11.2009
Сообщений: 257

Посмотрите скрипт...кароче бегаем по карте 10*10. Чего лагает так жестко?
index.php
<?php
session_start();
for ($y=0; $y<=10; $y++){
	for ($x=0; $x<=10; $x++){
	if (isset($_SESSION['x'.$x.'y'.$y])){
		unset($_SESSION['x'.$x.'y'.$y]);
		}
	}
}
if (isset($_SESSION['pos'])){
		unset($_SESSION['pos']);
}
session_register('pos');
for ($y=0; $y<=10; $y++){
	for ($x=0; $x<=10; $x++){
		$mapelements.="<div style='float:left; position:relative; left:".($x*50)."; top:".($y*50)."; width:50px; height:50px; background-image:url(img/no.gif);' id='x".$x."y".$y."'></div>";
		session_register('x'.$x.'y'.$y);
	}
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title></title>
<script language="javascript" type="text/javascript" src="code.js"></script>
</head>
<body onLoad="setInterval('loadmap()', 200)">
<input type="text" name="user" id="user" value="Jekel"> 
<input id="pos" type="text" value="">
<br>
<input style="margin-left:25px;" type="submit" name="up" id="up" value="Up" onClick="moveto('up')"><br>
<input type="submit" name="left" id="left" value="Left" onClick="moveto('left')">
<input type="submit" name="right" id="right" value="Right" onClick="moveto('right')"><br>
<input style="margin-left:15px;" type="submit" name="down" id="down" value="Down" onClick="moveto('down')">
<table width="550" height="550" border="1" align="center" cellpadding="1" cellspacing="1">
  <tr>
    <td align="left" valign="top" bgcolor="#FFFFCC"><div style='float:left; position:relative; left:0; top:0; width:550px; height:550px;'><?php echo $mapelements;?></div></td>
  </tr>
</table>
</body>
</html>


code.js
function loadmap(){
	var username = document.getElementById('user').value;
	var map;
	var pos;
	var x;
	var y;
        
	var XMLHttpRequestObject = false; 

    if (window.XMLHttpRequest) {
		XMLHttpRequestObject = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
        XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
    }

    if(XMLHttpRequestObject) {
		XMLHttpRequestObject.open("GET", "server.php?un=" + username); 

		XMLHttpRequestObject.onreadystatechange = function() { 
            if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) { 
            var xmlDocument = XMLHttpRequestObject.responseXML;
			var xmlResp = xmlDocument.documentElement;
				try{
					pos = xmlResp.getElementsByTagName('pos').item(0).firstChild.data;
					//if(document.getElementById('pos').value!= pos){
					document.getElementById('pos').value = pos;
					//}
				}catch(e){}

			for(x=0; x<=10; x++){
				for(y=0; y<=10; y++){
					try{
						map = xmlResp.getElementsByTagName('x'+x+'y'+y).item(0).firstChild.data;

            					document.getElementById('x'+x+'y'+y).style.backgroundImage  = "url(img/" + map + ")";

					}catch(e){}
				}
			}

			}
		}
		XMLHttpRequestObject.send(null); 
	}
}
		
function moveto(storona){
	var username = document.getElementById('user').value;
	var XMLHttpRequestObjectMove = false; 

	if (window.XMLHttpRequest) {
		XMLHttpRequestObjectMove = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		XMLHttpRequestObjectMove = new ActiveXObject("Microsoft.XMLHTTP");
	}

	if(XMLHttpRequestObjectMove) {
		XMLHttpRequestObjectMove.open("GET", "server.php?un=" + username + "&move=" + storona);
		XMLHttpRequestObjectMove.send(null); 
	}
}


server.php
<?php
session_start();
header('Content-Type: text/xml; charset=windows-1251');
require_once "config.php";
mysql_connect($host, $userdb, $passdb); 
mysql_select_db($database);

$username = $_GET["un"];

$user = mysql_fetch_assoc(mysql_query("SELECT * FROM users WHERE user='".$username."'"));

list($userx, $usery) = explode('y', substr($user['cord'], 1));

if($_GET['move']=="right"){
	mysql_query("UPDATE users SET cord='x".($userx+1)."y".$usery."' WHERE user='".$username."'"); 
}else if($_GET['move']=="left"){
	mysql_query("UPDATE users SET cord='x".($userx-1)."y".$usery."' WHERE user='".$username."'"); 
}else if($_GET['move']=="up"){
	mysql_query("UPDATE users SET cord='x".$userx."y".($usery-1)."' WHERE user='".$username."'"); 
}else if($_GET['move']=="down"){
	mysql_query("UPDATE users SET cord='x".$userx."y".($usery+1)."' WHERE user='".$username."'"); 
}

for ($y=-5;$y<6;$y++){
  for ($x=-5;$x<6;$x++){
	$mybase = mysql_fetch_assoc(mysql_query("SELECT * FROM map WHERE cord='x".($userx+$x)."y".($usery+$y)."'"));
	if($mybase["img"]!=NULL && $mybase["img"]!=""){
		if($_SESSION[$mybase["cord"]]!=$mybase["img"]){
			$all.="<".$mybase["cord"].">".$mybase["img"]."</".$mybase["cord"].">";
			$_SESSION[$mybase["cord"]]=$mybase["img"];
		}
	}
}
}

//Вывод на экран

//if($all!=NULL && $all!=""){
echo '<?xml version="1.0" ?>';
echo '<map>';
echo $all;
if($_SESSION['pos']!=$user["cord"]){
echo "<pos>".$user["cord"]."</pos>";
$_SESSION['pos']=$user["cord"];
}
echo '</map>';
//}
?>
Ответить с цитированием
  #2 (permalink)  
Старый 27.03.2010, 18:24
Аватар для Jekel
Профессор
Отправить личное сообщение для Jekel Посмотреть профиль Найти все сообщения от Jekel
 
Регистрация: 20.11.2009
Сообщений: 257

без цикла в server.php вродебы работало нормально...а сейчас тупит капец
Ответить с цитированием
  #3 (permalink)  
Старый 27.03.2010, 18:34
Аватар для Jekel
Профессор
Отправить личное сообщение для Jekel Посмотреть профиль Найти все сообщения от Jekel
 
Регистрация: 20.11.2009
Сообщений: 257

посоветуйте чтонить, как оптимизировать?
Ответить с цитированием
  #4 (permalink)  
Старый 27.03.2010, 19:08
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

вот щаз бросим все, ис танем это себе по кускам на сервер переносить.
локализуйте поблему, прежде чем задавать вопрос.
для ее выяснения столько можно гораздо меньше кода было выложить
а если уж, вы решили нам половину своего проекта скинуть на обозрения, то вам стоило сделать следующее:
1)не выкладывать все это в теле поста, а сложить в один архив, не забыв положить туда же дамп таблицы(которого тут нету)
2)и помимо этого выложить на свой хостинг, чтобы можно было глянуть наживую
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск